# student:xingqian
# week05: 数据结构之列表--->slice

# 官网：docs.python.org/3/tutorial/introduction.html#lists
# 构建列表 形式[] 其中元素以“,”隔开
# 列表是有顺序的一组值，顺序默认从0开始

# 字符串和列表输出的区别
# names_str = "Mike,Mary,Jan,Jack"
# names_list = ["mike","Mary","Jan","Jack"]
# print(names_str)
# print(names_list)
#
# 应用1：请取出每一个名字（如取第一个名字）
# 区别：第一行代码取出来的是第一个字符，第二行代码取出来的是第一个字符串
# print(names_str[0])
# print(names_list[0])
#
# 应用2：
password_list = [123,456,789,108]
user_age = [21,43,54,76]
print(password_list[0])
print(user_age[0])


# 切片：在列表中的任意位置开始和结束以及选择对象，返回的数据称为切片（slice）

names = ["Mike","Mary","Jan","Jack"]
# 索引：     0      1      2     3
#  值：   Mike    Mary   Jan   Jack

# 取值   index索引
# 1.正数
# print(names[3])
# 2.负数（倒数第几个数）
# print(names[-2])
#
# IndexError: list index out of range
# 已经超过索引范围，所以报错
# print(names[5])


# 取值  slice切片（多个或单个值）
# print(names[:])
#
# 1.在从左到右取值时，右边的值取不到
# print(names[1:3])
#
# 2.如果从0开始取值，可以省略不写 0
# print(names[:3])
#
# 3.从右往左取值时,右边的值取不到
# print(names[-3:-1])
# 怎么能取到-1最后位置的值呢？右侧不写任何值
# print(names[-3:])
#
# 4.特殊情况
num_list = list(range(10))
print(num_list)
# 开始、结束、步长，最右边的结束值取不到
print(num_list[0:7:3])


# 开始和结束列表
# 首先将一个字符串转换为一个字母列表
book = "the hitchhiker' s guide to the galaxy"
booklist = list(book)
booklist[0:3]          # 从列表选择前3个对象
''.join(booklist[0:3])              # 将所选范围转换为一个字符串
''.join(booklist[-6:])          # 选择列表后面6个对象

# 使用步长
backwords = booklist[::-1]     # 开始值和结束值都为默认，步长为-1
word = ''.join(backwords)            # 从列表末尾开始（逆序选择），并把列表转换为字符串
print(word)


# 在列表中使用切片--->把"don't panic“转换为"on tap"-->使用中括号记法
phrase = "don't panic!"
plist = list(phrase)
new_phrase = ''.join(plist[1:3])        # 首先从plist中取出单词on
new_phrase = new_phrase+''.join([plist[5],plist[4],plist[7],plist[6]])
                          # 然后挑出我们需要的各个其他字母：空格，”t“，”a“，”p"
new_phrase = ''.join(plist)
print(plist)
print(new_phrase)

